/**
 * 用户管理API
 */

import { setUserAvatarUrl } from './user-avatar.js';
import { isTokenExpiredError, handleTokenExpiredError, checkAndHandleAuthError } from './auth-error-handler.js';

// 获取存储的token
function getToken() {
  return wx.getStorageSync('access_token') || '';
}

/**
 * 获取当前用户信息
 */
export async function getCurrentUserInfo() {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'getUserInfo',
        data: {},
        token: getToken()
      }
    });
    
    // 检查是否为token过期错误
    if (checkAndHandleAuthError(result, {
      customMessage: '用户信息已过期，请重新登录'
    })) {
      return {
        success: false,
        code: 401,
        message: '认证失败，请重新登录'
      };
    }
    
    if (result.result.success) {
      // 更新本地存储的用户信息并设置头像
      const userInfoWithAvatar = await setUserAvatarUrl(result.result.data);
      wx.setStorageSync('user_info', userInfoWithAvatar);
      return result.result;
    }
    
    return result.result;
  } catch (error) {
    console.error('获取用户信息失败:', error);
    
    // 检查异常信息是否包含token过期错误
    if (isTokenExpiredError(error.message)) {
      handleTokenExpiredError({
        customMessage: '用户信息已过期，请重新登录'
      });
      return {
        success: false,
        code: 401,
        message: '认证失败，请重新登录'
      };
    }
    
    return {
      success: false,
      code: 500,
      message: '获取用户信息失败'
    };
  }
}

/**
 * 获取指定用户信息
 */
export async function getUserInfo(userId) {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'getUserInfo',
        data: { userId },
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('获取用户信息失败:', error);
    return {
      success: false,
      code: 500,
      message: '获取用户信息失败'
    };
  }
}

/**
 * 更新用户信息
 */
export async function updateUserInfo(data) {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'updateUserInfo',
        data: data,
        token: getToken()
      }
    });
    
    if (result.result.success) {
      // 重新获取用户信息更新本地存储
      await getCurrentUserInfo();
    }
    
    return result.result;
  } catch (error) {
    console.error('更新用户信息失败:', error);
    return {
      success: false,
      code: 500,
      message: '更新用户信息失败'
    };
  }
}

/**
 * 修改密码（不需要旧密码）
 */
export async function changePasswordWithoutOld(newPassword) {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'changePasswordWithoutOld',
        data: {
          newPassword
        },
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('修改密码失败:', error);
    return {
      success: false,
      code: 500,
      message: '修改密码失败'
    };
  }
}

/**
 * 修改密码
 */
export async function changePassword(oldPassword, newPassword) {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'changePassword',
        data: {
          oldPassword,
          newPassword
        },
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('修改密码失败:', error);
    return {
      success: false,
      code: 500,
      message: '修改密码失败'
    };
  }
}

/**
 * 获取用户列表（管理员功能）
 */
export async function getUserList(page = 1, limit = 20, keyword = '') {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'getUserList',
        data: {
          page,
          limit,
          keyword
        },
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('获取用户列表失败:', error);
    return {
      success: false,
      code: 500,
      message: '获取用户列表失败'
    };
  }
}

/**
 * 重置用户密码（管理员功能）
 */
export async function resetUserPassword(userId, newPassword) {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'resetPassword',
        data: {
          userId,
          newPassword
        },
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('重置密码失败:', error);
    return {
      success: false,
      code: 500,
      message: '重置密码失败'
    };
  }
}

/**
 * 设置用户状态（管理员功能）
 */
export async function setUserStatus(userId, status) {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'setUserStatus',
        data: {
          userId,
          status
        },
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('设置用户状态失败:', error);
    return {
      success: false,
      code: 500,
      message: '设置用户状态失败'
    };
  }
}

/**
 * 删除用户（管理员功能）
 */
export async function deleteUser(userId) {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'deleteUser',
        data: {
          userId
        },
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('删除用户失败:', error);
    return {
      success: false,
      code: 500,
      message: '删除用户失败'
    };
  }
}

/**
 * 获取用户统计信息
 */
export async function getUserStats() {
  try {
    const result = await wx.cloud.callFunction({
      name: 'user-management',
      data: {
        action: 'getUserStats',
        token: getToken()
      }
    });
    
    return result.result;
  } catch (error) {
    console.error('获取用户统计失败:', error);
    return {
      success: false,
      code: 500,
      message: '获取用户统计失败'
    };
  }
}

/**
 * 检查是否使用默认密码并提醒用户修改
 */
export function checkAndNotifyDefaultPassword() {
  const userInfo = wx.getStorageSync('user_info');
  
  if (userInfo && userInfo.hasDefaultPassword) {
    wx.showModal({
      title: '安全提醒',
      content: '您当前使用的是系统默认密码，为了账户安全，建议您尽快修改密码。',
      confirmText: '立即修改',
      cancelText: '稍后修改',
      success: (res) => {
        if (res.confirm) {
          // 跳转到密码修改页面
          wx.navigateTo({
            url: '/pages/change-password/index?fromDefault=1'
          });
        }
      }
    });
  }
} 